package main

import "fmt"

func main() {

	a := 10
	str := "mike"
	fmt.Println("0 匿名函数，没有函数名字, 函数定义，以及函数调用")
	f1 := func() {
		fmt.Println("a = ", a)
		fmt.Println("str = ", str)
	}
	f1()

	fmt.Println("1 给一个函数类型起别名,没有参数，没有返回值(很少使用)")
	type FuncType func()
	var f2 FuncType
	f2 = f1
	f2()

	fmt.Println("3 定义匿名函数，同时调用 ")
	func() {
		fmt.Printf("a = %d, str = %s\n", a, str)
	}()

	fmt.Println("4 带参数的匿名函数 ")
	f3 := func(i, j int) {
		fmt.Printf("i = %d, j = %d\n", i, j)
	}
	f3(1, 2)

	fmt.Println("5 定义带参数的匿名函数，同时调用 ")
	func(i, j int) {
		fmt.Printf("i = %d, j = %d\n", i, j)
	}(10, 20)

	fmt.Println("6 定义匿名函数，有参有返回值 ")
	x, y := func(i, j int) (max, min int) {
		if i > j {
			max = i
			min = j
		} else {
			max = j
			min = i
		}

		return
	}(10, 20)

	fmt.Printf("x = %d, y = %d\n", x, y)

	c, d := func(i, j int) (max, min int) {
		if i > j {
			max = i
			min = j
		} else {
			max = j
			min = i
		}
		return // 非常关键
	}(23, 56)

	fmt.Printf("c = %d, d = %d\n", c, d)

}
